package model

import (
	"time"
)

// DirectoryTreeNode 目录树节点
type DirectoryTreeNode struct {
	Name       string               `json:"name"`        // 文件/目录名
	Path       string               `json:"path"`        // 完整路径
	Type       string               `json:"type"`        // 类型: "file" 或 "directory"
	Size       int64                `json:"size"`        // 文件大小（目录为0）
	Extension  string               `json:"extension"`   // 文件扩展名
	ModTime    time.Time            `json:"mod_time"`    // 修改时间
	IsIndexed  bool                 `json:"is_indexed"`  // 是否已被索引
	Children   []*DirectoryTreeNode `json:"children"`    // 子节点（仅目录有）
	Depth      int                  `json:"depth"`       // 节点深度
	IsExpanded bool                 `json:"is_expanded"` // 是否展开（前端使用）
}

// DirectoryTreeRequest 目录树请求
type DirectoryTreeRequest struct {
	Directory   string `json:"directory"`    // 要获取目录树的根目录
	MaxDepth    int    `json:"max_depth"`    // 最大深度，0表示无限制
	ShowHidden  bool   `json:"show_hidden"`  // 是否显示隐藏文件
	FileFilter  string `json:"file_filter"`  // 文件名过滤器（支持正则表达式）
	OnlyIndexed bool   `json:"only_indexed"` // 是否只显示已索引的文件
}

// DirectoryTreeResponse 目录树响应
type DirectoryTreeResponse struct {
	Root          *DirectoryTreeNode `json:"root"`           // 根节点
	TotalFiles    int                `json:"total_files"`    // 总文件数
	TotalDirs     int                `json:"total_dirs"`     // 总目录数
	IndexedFiles  int                `json:"indexed_files"`  // 已索引文件数
	FilteredFiles int                `json:"filtered_files"` // 过滤后的文件数
	Took          int64              `json:"took"`           // 处理耗时（毫秒）
}

// DirectoryTreeSearchRequest 目录树搜索请求
type DirectoryTreeSearchRequest struct {
	DirectoryTreeRequest
	Pattern       string `json:"pattern"`        // 搜索模式（支持正则表达式）
	SearchType    string `json:"search_type"`    // 搜索类型: "filename", "path", "extension"
	CaseSensitive bool   `json:"case_sensitive"` // 是否区分大小写
}

// DirectoryTreeStats 目录树统计信息
type DirectoryTreeStats struct {
	TotalNodes   int              `json:"total_nodes"`   // 总节点数
	FileNodes    int              `json:"file_nodes"`    // 文件节点数
	DirNodes     int              `json:"dir_nodes"`     // 目录节点数
	IndexedNodes int              `json:"indexed_nodes"` // 已索引节点数
	MaxDepth     int              `json:"max_depth"`     // 最大深度
	FileTypes    map[string]int   `json:"file_types"`    // 文件类型统计
	SizeByType   map[string]int64 `json:"size_by_type"`  // 按类型统计大小
	LastScanned  time.Time        `json:"last_scanned"`  // 最后扫描时间
}

// DBDirectoryTreeSearchRequest 基于数据库的目录树搜索请求
type DBDirectoryTreeSearchRequest struct {
	Pattern    string `json:"pattern"`     // 正则表达式模式
	SearchPath string `json:"search_path"` // 搜索路径（可选）
}
